/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package gace.dao;

import gace.basededatos.Conexion;
import gace.logica.Paquete;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

/**
 *
 * @author Cast-Valv-HP
 */
public class PaqueteDao {

    Connection conexion;

    public PaqueteDao() throws SQLException{
        this.conexion =  Conexion.getConexion();
    }

    /**
     * Crea un registro en la tabla paquete en la bd, verificando antes que no
     * exista ya un paquete con el mismo nombre. Un paquete implica la creacion
     * de dos o mas relaciones con la tabla servicio (tabla paquete-servicio)
     * @param p1 Objeto de tipo Paquete, el cual representa el paquete
     * que se ha creado.
     */
    public void crearPaquete(Paquete p1) throws SQLException{

        String sql = "insert into paquete (nombre, descripcion, precio)" +
                "values (?, ?, ?)";

        PreparedStatement stmt = conexion.prepareStatement(sql);
        stmt.setString(1, p1.getNombre());
        stmt.setString(2, p1.getDescripcion());
        stmt.setDouble(3, p1.getPrecio());

        // se ejecuta la sentencia sql definida previamente
        stmt.execute();
        stmt.close();

    }

    /**
     * Modifica los atributos del registro con el id del paquete parametro en
     * la bd. El unico atributo que no puede ser modificado es el id.
     * @param p1 Objeto de tipo Paquete, el cual representa el
     * paquete que se ha creado.
     */
    public void modificarPaquete(Paquete p1) throws SQLException{

        // Ser prepara la sentencia sql
        String sql = "update paquete set nombre=?, descripcion=?, precio=? "
                + "where idpaquete=?";
        PreparedStatement stmt = conexion.prepareStatement(sql);
        stmt.setString(1, p1.getNombre());
        stmt.setString(2, p1.getDescripcion());
        stmt.setDouble(3, p1.getPrecio());

        // se ejecuta la sentencia sql definida previamente
        stmt.execute();
        stmt.close();
    }

    /**
     * Elimina el registro en la bd con el id del paquete parametro,
     * tanto de la tabla paquete como de la tabla paquete-servicio
     * @param p1 Objeto de tipo Paquete, el cual representa el
     * paquete que se ha creado.
     */
    public void eliminarPaquete(Paquete p1) throws SQLException{

        String sql = "delete from paquete where idpaquete=?";
        PreparedStatement stmt = this.conexion.prepareStatement(sql);
        stmt.setLong(1, p1.getId());
        stmt.execute();
        stmt.close();
    }

    /**
     * @return Una lista con datos de todos los paquetes en la bd
     */
    public ArrayList<Paquete> listarPaquetes(String name) throws SQLException{

        String sql = "select * from paquete where nombre like ?";
        PreparedStatement stmt = this.conexion.prepareStatement(sql);
        stmt.setString(1, name);
        ResultSet rs = stmt.executeQuery();

        ArrayList<Paquete> miLista = new ArrayList<Paquete>();

        while(rs.next()){
            Paquete p1 = new Paquete();
            p1.setId(rs.getInt("idpaquete"));
            p1.setPrecio(rs.getDouble("precio"));
            p1.setDescripcion(rs.getString("descripcion"));
            p1.setNombre(rs.getString("nombre"));
            miLista.add(p1);
        }

        rs.close();
        stmt.close();

        return miLista;

    }

}
